#!/usr/bin/env python
# -*- coding: UTF-8 -*-

'''
    数据加载器：把 MNIST 数据集处理为神经网络能够接受的形式
    每个训练样本是一个28*28的图像，我们按照行优先，把它转化为一个784维的向量。
    每个标签是0-9的值，我们将其转换为一个10维的one-hot向量：如果标签值为n，
    我们就把向量的第n维（从0开始编号）设置为0.9，
    而其它维设置为0.1。
    例如，向量[0.1,0.1,0.9,0.1,0.1,0.1,0.1,0.1,0.1,0.1]表示值2。
'''

import struct

class Loader(object):
    def __init__(self,path,count):
        '''
        初始化加载器
        :param path: 数据文件的路径
        :param count: 文件中样本的个数
        '''
        self.path = path
        self.count = count


    def get_file_content(self):
        '''
        读取文件内容
        :return:
        '''
        '''
            open 的 mode 方法介绍：
            使用r：是推荐使用的打开文本文件的模式。
                   因为使用此模式打开文本文件时，python默认为我们做了一些处理，
                   比如：假设在windows下，将本来应该读入的换行符\r\n处理成\n,方便我们处理。
                   （值得一提的是，当你将\n写入文件时，python也会默认将其替换成\r\n，如果你是win系统的话） 
                   补充：其实是启用了通用换行符支持（UNS），它默认开启。 
            使用rb： 则python不会对文本文件预处理了，你读入的\r\n依然是\r\n.
        '''
        f = open(self.path, "rb")
        content = f.read()
        f.close()
        print  "content:"+content
        return content


    def to_int(self, byte):
        '''
        将 unsigned byte 转换为整数
        :param byte: unsigned byte
        :return:
        '''
        '''
             按照给定的格式(fmt)解析字节流string，返回解析出来的tuple
             B: unsigned char
             b: signed char
        '''
        return struct.unpack('B', byte)[0]